package aaaaa;

import com.github.rholder.retry.*;

import java.util.concurrent.TimeUnit;

public class MyGuavaRetry {


    public static void main(String[] args) {
        // 创建重试器
        Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
                .retryIfException() // 出现异常时重试
                .retryIfResult(result -> !result) // 结果为false时重试
                .withStopStrategy(StopStrategies.stopAfterAttempt(3)) // 最大重试次数
                .withWaitStrategy(WaitStrategies.fixedWait(500, TimeUnit.MILLISECONDS)) // 固定等待时间
                .build();

        try {
            // 执行需要重试的操作
            boolean result = retryer.call(() -> {
                // 业务逻辑代码
                return doSomething();
            });
            System.out.println("最终结果: " + (result ? "成功" : "失败"));
        } catch (RetryException e) {
            e.printStackTrace();
            System.err.println("重试超过最大次数，操作失败");
        } catch (Exception e) {
            System.err.println("发生未处理异常: " + e.getMessage());
        }
    }

    private static boolean doSomething() {
        // 模拟业务逻辑，随机成功/失败
        double random = Math.random();
        System.out.println("执行操作，随机值: " + random);

        if (random > 0.7) {
            return true; // 成功
        } else if (random > 0.3) {
            throw new RuntimeException("业务异常"); // 抛出异常
        }
        return false; // 失败
    }

}
